CLANG ?= clang
LLVM_STRIP ?= llvm-strip
BPFTOOL ?= bpftool

ARCH := $(shell uname -m | sed 's/x86_64/x86/' | sed 's/aarch64/arm64/' | sed 's/ppc64le/powerpc/' | sed 's/mips.*/mips/')
VMLINUX := vmlinux.h

.PHONY: all clean

all: cpu_monitor 

$(VMLINUX):
	bpftool btf dump file /sys/kernel/btf/vmlinux format c > $@

cpu_monitor.bpf.o: cpu_monitor.bpf.c $(VMLINUX)
	$(CLANG) -g -O2 -target bpf -D__TARGET_ARCH_$(ARCH) -I. -c $< -o $@
	$(LLVM_STRIP) -g $@

cpu_monitor.skel.h: cpu_monitor.bpf.o
	$(BPFTOOL) gen skeleton $< > $@

cpu_monitor: cpu_monitor.c cpu_monitor.skel.h
	$(CC) -g -O2 -Wall -I. -c $< -o cpu_monitor.o
	$(CC) -g -O2 -o $@ cpu_monitor.o -lbpf -lelf -lz

clean:
	rm -f *.o
	rm -f cpu_monitor
	rm -f cpu_monitor.skel.h
	rm -f cpu_monitor.bpf.o
	rm -f $(VMLINUX)
